Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added limited multi-user support (via root) #282

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

hyperzlib
Copy link

@hyperzlib hyperzlib commented Sep 15, 2023

Fix for https://github.com/Dr-TSNG/Hide-My-Applist/issues/81

相比 #266 更接近原生的多用户管理(并且会显示工作资料小图标),但是目前由于核心功能不支持多用户,获取到的userId暂且没用。

具体做法:

  1. 通过pm list users获取用户列表。
  2. 通过 pm grant ${pkgName} android.permission.INTERACT_ACROSS_USERS 让HMA获取特殊权限。
  3. 通过Hidden API getInstalledPackagesAsUser 获取指定用户下的所有应用。

1和2运行时均需要root权限,可能需要在UI上添加对应提示,以及调整授权的时机。

@5ec1cff
Copy link

5ec1cff commented Sep 15, 2023

在系统服务里面向 app 暴露个 api 获取所有用户的包就行了,哪用那么麻烦

@hyperzlib
Copy link
Author

在系统服务里面向 app 暴露个 api 获取所有用户的包就行了,哪用那么麻烦

系统服务还是尽量别hook,鬼知道那些定制UI内部加了些什么东西。

@walwan
Copy link

walwan commented Oct 13, 2023

感谢提交这个功能,我现在使用工作账户正好需要这个。
我合并这个提交,编译后发现一开始不能正常识别工作账户里的应用,后来发现是代码里默认不尝试授予INTERACT_ACROSS_USERS这个权限(函数默认参数是否),我手动授予后就正常工作了。

@hyperzlib
Copy link
Author

感谢提交这个功能,我现在使用工作账户正好需要这个。
我合并这个提交,编译后发现一开始不能正常识别工作账户里的应用,后来发现是代码里默认不尝试授予INTERACT_ACROSS_USERS这个权限(函数默认参数是否),我手动授予后就正常工作了。

是这样吗?我是在读取应用列表时写了个检测,如果没有权限就使用root自动添加权限。

@walwan
Copy link

walwan commented Oct 20, 2023

好像是的。我看您在158行这里
fun getInstalledPackagesFromUser(user: Int, tryGrantPermission: Boolean = false): List {
给的tryGrantPermission默认参数是false。然后170-173行
if (tryGrantPermission) {
grantCrossUserPermissions()
return getInstalledPackagesFromUser(user)
}
这里调的时候没有给参数。

@hyperzlib
Copy link
Author

好像是的。我看您在158行这里 fun getInstalledPackagesFromUser(user: Int, tryGrantPermission: Boolean = false): List { 给的tryGrantPermission默认参数是false。然后170-173行 if (tryGrantPermission) { grantCrossUserPermissions() return getInstalledPackagesFromUser(user) } 这里调的时候没有给参数。

似乎是调试的时候修改了,没有改回去。

@aruskkk
Copy link

aruskkk commented Mar 5, 2024

Hello 👋 I can't use Hma On other users on Google pixel

@YuruiHong
Copy link

感谢提交这个功能,我现在使用工作账户正好需要这个。 我合并这个提交,编译后发现一开始不能正常识别工作账户里的应用,后来发现是代码里默认不尝试授予INTERACT_ACROSS_USERS这个权限(函数默认参数是否),我手动授予后就正常工作了。

请问目前具体如何使用呢?我在编译安装此分支后尝试过在adb shell中pm grant com.tsng.hidemyapplist android.permission.INTERACT_ACROSS_USERS,但是仍然未改变可配置的应用。以及是否有必要在工作空间中也安装一份?

@hyperzlib
Copy link
Author

感谢提交这个功能,我现在使用工作账户正好需要这个。 我合并这个提交,编译后发现一开始不能正常识别工作账户里的应用,后来发现是代码里默认不尝试授予INTERACT_ACROSS_USERS这个权限(函数默认参数是否),我手动授予后就正常工作了。

请问目前具体如何使用呢?我在编译安装此分支后尝试过在adb shell中pm grant com.tsng.hidemyapplist android.permission.INTERACT_ACROSS_USERS,但是仍然未改变可配置的应用。以及是否有必要在工作空间中也安装一份?

这个只需要在主用户中安装。之前测试的时候使用的是安卓12,没有对安卓12以上的系统进行测试。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants